問題描述
如何用外鍵鏈接兩種形式(wagtail 形式和 django 形式)? (How to link two forms (wagtail form and django form) with a foreign key?)
我將 django 表單與 wagtail 表單結合使用。django 表單將記錄一些字段,這些字段將在此類型的任何表單上:姓名、電子郵件和 wagtail 表單將記錄由特定於該實例的表單頁面創建者定義的額外數據。
我已經重載用於捕獲兩組數據的 serve 方法,我可以處理這兩個表單,但是在嘗試添加將表單內容相互關聯的邏輯時我被卡住了,這樣當一個提交集被刪除時,另一組將是出色地。我認為我需要的是外鍵。
以下代碼在 form_submission.event_submission = a.id 失敗,我想從 wagtail 表單提交中獲取 id 並將其添加為外鍵到 django 表單,這樣當 wagtail 表單部分被刪除時,另一個也被刪除,這樣我就可以在兩個表單提交之間建立一個可用的鏈接。
def serve(self, request, *args, **kwargs):
if request.method == 'POST':
form = EventSignupForm(request.POST)
wagtail_form = self.get_form(request.POST, request.FILES, page=self, user=request.user)
if form.is_valid() and wagtail_form.is_valid():
a = self.process_form_submission(wagtail_form)
form_submission = form.save(commit=False)
form_submission.event_submission = a.id
form_submission.save()
return self.render_landing_page(request, form_submission, *args, **kwargs)
else:
form = EventSignupForm()
wagtail_form = self.get_form(page=self, user=request.user)
context = self.get_context(request)
context['form'] = form
context['wagtail_form'] = wagtail_form
return TemplateResponse(
request,
self.get_template(request),
context
)
表單提交類和 django 模型表單看起來像這樣。我認為我在模型中的 ForeignKey 不正確,但我不知道。有什麼幫助嗎?
class EventFormSubmission(AbstractFormSubmission):
cancellation_id = models.CharField(max_length=7)
class EventSignup(models.Model):
"""
A model to contain signup info for an event: name, email.
"""
event_submission = models.ForeignKey(EventFormSubmission, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
email = models.EmailField()
參考解法
方法 1:
I solved this by adding the extra fields I wanted (name, email) to the EventFormSubmission and then using a regular django form (not a ModelForm) to collect these pieces of information.
(by Chris Roth、Chris Roth)